<?php

namespace Illuminate\Contracts\Auth;

/**
 * 用户提供者接口定义
 */
interface UserProvider
{
    /**
     * 根据用户的唯一标识符检索用户对象
     *
     * @param  mixed $identifier 标识符
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveById($identifier);

    /**
     * 根据用户的唯一标识符和 remember me 令牌检索用户
     *
     * @param  mixed $identifier 用户标识符
     * @param  string $token 令牌
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByToken($identifier, $token);

    /**
     * 更新用户 remember me 令牌
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable $user
     * @param  string $token 令牌
     * @return void
     */
    public function updateRememberToken(Authenticatable $user, $token);

    /**
     * 根据给定的凭据检索用户
     *
     * @param  array $credentials 登录凭据
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByCredentials(array $credentials);

    /**
     * 根据给定的凭据验证用户
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable $user 用户对象
     * @param  array $credentials 登录凭据
     * @return bool
     */
    public function validateCredentials(Authenticatable $user, array $credentials);
}
